﻿using System;
using System.Collections.Generic;
using System.Text;

namespace 抽象类
{
   public abstract class Animal
    {
        //abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract
        //abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract bastract abstract abstract
        public abstract void Bark();
    }
    public class dog:Animal
    {
        public override void Bark()
        {
            Console.WriteLine("狗狗旺旺的叫");
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public override string ToString()
        {
            return base.ToString();
        }
    }
    public class cat : Animal
    {
        public override void Bark()
        {
            Console.WriteLine("猫喵喵叫");
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public override string ToString()
        {
            return base.ToString();
        }
    }

    public abstract class Shape
    {
        public abstract double GetArea();
        public abstract double GetPerimeter();
    }
    public class Circle : Shape
    {
        private double _r;
        public double R
        {
            get { return _r; }
            set { _r = value; }
        }
        public Circle(double r)
        {
            this.R = r;
        }
        public override double GetArea()
        {
            return Math.PI * this.R * this.R;
        }

        public override double GetPerimeter()
        {
            return 2 * Math.PI * this.R;
        }
    }

    public class Square : Shape
    {
        private double _height;
        public double Height
        {
            get { return _height; }
            set { _height = value; }
        }
        private double _width;
        public double Width
        {
            get { return _width; }
            set { _width = value; }
        }
        public Square(double height,double width)
        {
            this.Height = height;
            this.Width = width;
        }
        public override double GetArea()
        {
            return this.Height * this.Width;
        }
        public override double GetPerimeter()
        {
            return (this.Height + this.Width) * 2;
        }
    }
}
